# -*-coding: UTF-8 -*-
""" 
La classe abstraite d'un mini-jeu. 
"""
import Pyro.core
from _Outils.Position import *
from _Outils.Rectangle import *

class PartieMiniJeu(Pyro.core.ObjBase):
    """ La classe abstraite d'un mini-jeu. """
    def __init__(self, nom, joueurs):
        Pyro.core.ObjBase.__init__(self)
        self.nom = nom
        self.description=""
        self.termine = False
        self.joueurs = {}
        if joueurs:
            for joueur in joueurs:
                self.joueurs[joueur.nom]=JoueurMiniJeu(joueur)
        
    def start(self, listeJoueurs):
        #reset et ini
        self.reset(listeJoueurs)
        pass

    def reset(self):
        #a redefinir dans les classes enfants
        pass

    def play(self):
        #launch = go (comme le coup de fusil d'un debut de course). a redefinir dans les classes enfants
        pass

    def getJoueurs(self):
        return self.joueurs

    def getDescription(self):
        return self.description
        
    def getPointsFinal(self):
        """
        De 0 à (n-1) (max)
        """
        positionsFinales = []
        for joueur in self.joueurs.values():
            indexPos = 0
            for j in positionsFinales:
                if j.score > joueur.score:
                    indexPos+=1
            positionsFinales.insert(indexPos, joueur)

        posFinalFormatted = {}
        i = 0
        lastScore = -1
        lastPosition = 0
        for j in positionsFinales:
            if j.score != lastScore:
                lastScore = j.score
                lastPosition = i
                i+=1
            posFinalFormatted[j.nom] = lastPosition
        
        print posFinalFormatted
        
        return posFinalFormatted
        
    def getDescription(self):
        return "Description générique."
    
    def updateScore(self, joueur, score):
        pass
        
    def calculerPositions(self):
        pass
    
class JoueurMiniJeu:
    def __init__(self,joueur):
        self.nom=joueur.nom
        self.couleur=joueur.couleur
        self.pos=Position(0,0)
        self.largeur = 0
        self.hauteur = 0
        self.tempsFin=60#on peut modifier le 60 mis la pour faire "Beau"
        self.score = 0;
    
    def toRectangle(self):
        return Rectangle(self.pos.x, self.pos.y, self.largeur, self.hauteur)
    
    def finMiniJeu(self):
        pass
        #self.score=joueur.score+self.score
        #linker la m￩thode podium pour qu'elle affiche ou chaque 
        #joueur a finit
        #remettre en fonction la pdj principale avec un d￩lais pour se "placer"